Send HTML, or JSON plus a clean template, and get a PDF back in one HTTP call. Built for developers and AI agents.
POST /v1/pdf call. The free plan gives 100 documents a month (up to 10 pages each). Paid plans are $7 (1,000 docs), $19 (5,000) and $59 (25,000) per month. Rendering uses headless Chromium, and Simplified Chinese works out of the box. Docs: Markdown · OpenAPI 3.1 · Comparison with PDFShift, Api2Pdf and DocRaptor. Last checked 2026-10-18 · ChangelogEvery request is a POST to /v1/pdf with your key in Authorization: Bearer <key>. Sign up with your email to get a free key instantly (100 documents/month).
To try the examples below without signing up, use the public sandbox key. It allows 5 renders per IP per day (with a shared global cap), 1 page, up to 50 KB of HTML, and adds a "SANDBOX" watermark.
curl -X POST https://rendlet.com/v1/pdf \
-H "Authorization: Bearer sandbox" -H "Content-Type: application/json" \
-d '{"html":"<h1>Hello</h1><p>Rendered by Rendlet.</p>","options":{"format":"A4","margin":"15mm"}}' \
-o hello.pdf
curl -X POST https://rendlet.com/v1/pdf \
-H "Authorization: Bearer sandbox" -H "Content-Type: application/json" \
-d '{"template":"invoice","data":{"number":"INV-1001","currency":"USD",
"seller":{"name":"Acme Studio"},"buyer":{"name":"Globex"},
"items":[{"description":"Design sprint","qty":1,"unit_price":1800}],"tax_rate":0.1}}' \
-o invoice.pdf
Add "response":"base64" to get JSON instead of a binary stream:
{"template":"itinerary","data":{...},"response":"base64"}
→ {"filename":"document.pdf","pages":1,"bytes":1710,"content_type":"application/pdf","base64":"JVBERi0x..."}
The machine-readable spec is at /openapi.json (OpenAPI 3.1). There is a short summary for LLMs at /llms.txt.
Templates render without a browser, so they're fast and the layout doesn't change between calls. GET /v1/templates returns a full example payload for each one.
Seller and buyer blocks, line items, tax rate, totals, notes, and an accent colour.
Fields: number, date, due, currency, seller{name,address,email}, buyer{name,address}, items[{description,qty,unit_price}], tax_rate, notes, accent
A day-by-day travel plan with traveller details, timed activities and notes.
Fields: title, traveler, dates, days[{date,city,items[{time,activity,notes}]}], notes, accent
Send any HTML/CSS document. It's rendered in headless Chromium with print backgrounds, page size and margins you choose.
| Endpoint | Purpose |
|---|---|
POST /v1/pdf | Render a PDF. The body is {"html": "..."} or {"template": "invoice"|"itinerary", "data": {...}}. Optional: options.format (A4, Letter, Legal, A3, A5), options.landscape, options.margin, options.printBackground, filename, response (binary|base64). |
GET /v1/templates | Lists the templates with example requests. No key needed. |
GET /v1/usage | Your plan and month-to-date document count. |
POST /v1/signup | Get a free key: {"email","plan","use_case","volume"}. Returns api_key once. |
GET /openapi.json | OpenAPI 3.1 spec. |
Successful renders return headers X-Pages, X-Plan, X-Quota-Limit and X-Quota-Remaining. Errors are JSON {"error": "...", "message"?: "..."}: 400 bad request, 401 missing key, 403 invalid key, 413 too large or too many pages, 429 quota exceeded, 500 render failed.
For HTML input, JavaScript is disabled and only data: URIs and public https:// assets are loaded.
Simplified Chinese is supported out of the box: both modes include Noto Sans SC, covering Latin and the 6,763 common GB2312 characters. For other scripts, embed a web font in your HTML.
| Limit | Sandbox | Free | Starter | Pro | Scale |
|---|---|---|---|---|---|
| Documents | 5 / IP / day | 100 / month | 1,000 / month | 5,000 / month | 25,000 / month |
| Requests per minute | 3 | 10 | 30 | 60 | 120 |
| Pages per document | 1 | 10 | 50 | 200 | 500 |
| HTML size | 50 KB | 1 MB | 2 MB | 2 MB | 2 MB |
| Watermark | Yes | No | No | No | No |
Keys are issued only through email signup: one free key per email, and at most 3 signups per network per day. Keys are stored hashed, so we can't show a key again, only rotate it.
Every plan includes both HTML and template rendering. A document counts as one successful render.
Paid plans are live: click Subscribe and paste your free key to upgrade it.
429 quota_exceeded with an upgrade_url and the next plan, until the 1st of next month (UTC) or until you upgrade. Upgrading takes effect as soon as payment completes.X-Quota-Remaining shows what's left.Docs last checked 2026-10-18.
POST /v1/pdf (HTML and JSON templates), invoice and itinerary templates, OpenAPI spec.Your free key appears on screen right away. Copy it, because it's shown only once. We don't send email.