Rendlet PDF
Máy chủ MCP từ xa kết xuất HTML hoặc các mẫu có sẵn (hóa đơn, hành trình) thành PDF, hỗ trợ đầy đủ phông chữ tiếng Trung/CJK. Công cụ miễn phí không cần khóa: list_capabilities, get_pricing, preview_pdf. Kết xuất trả phí qua gói tín dụng Stripe hoặc USDC trên Base.
Máy chủ MCP được lưu trữ
npx add-mcp 'https://rendlet.com/mcp'Cài vào Claude Code, Codex, Cursor và nhiều công cụ khác
Tài liệu
Rendlet PDF API
Send HTML, or JSON plus a clean template, and get a PDF back in one HTTP call. Built for developers and AI agents.
The sandbox needs no signup and no key: 5 renders a day, 1 page, watermarked. · Copy-paste code · Sample PDF
Short answer: Rendlet turns HTML, or JSON plus a built-in invoice or itinerary template, into a PDF with one 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 · Changelog
Sample output
A real PDF rendered by this API: POST /v1/pdf in HTML mode with the free sandbox key (which is why it has the faint SANDBOX watermark). Page 1, top half:Download the sample PDF (29 KB) · the exact request body
Quick start
Every 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 free sandbox renders per day per network (with a shared global cap), 1 page, up to 50 KB of HTML, and adds a "SANDBOX" watermark.
HTML → PDF: curl, Node.js, Python
Each snippet runs as-is with the public sandbox key. To use your own key, set RENDLET_API_KEY to it.
# Works as-is with the public sandbox key. With your own key: export RENDLET_API_KEY=YOUR_API_KEY
curl -X POST https://rendlet.com/v1/pdf \
-H "Authorization: Bearer ${RENDLET_API_KEY:-sandbox}" \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Hello</h1><p>Rendered by Rendlet.</p>","options":{"format":"A4","margin":"15mm"}}' \
-o hello.pdf
// Node 18+ (built-in fetch). Save as render.mjs and run: node render.mjs
// Uses the public sandbox key unless you set RENDLET_API_KEY=YOUR_API_KEY
import { writeFile } from "node:fs/promises";
const res = await fetch("https://rendlet.com/v1/pdf", {
method: "POST",
headers: {
Authorization: \`Bearer ${process.env.RENDLET_API_KEY ?? "sandbox"}\`,
"Content-Type": "application/json",
},
body: JSON.stringify({
html: "<h1>Hello</h1><p>Rendered by Rendlet.</p>",
options: { format: "A4", margin: "15mm" },
}),
});
if (!res.ok) throw new Error(\`${res.status} ${await res.text()}\`);
await writeFile("hello.pdf", Buffer.from(await res.arrayBuffer()));
console.log("saved hello.pdf;", res.headers.get("x-quota-remaining"), "renders left");
# Python 3 + requests (pip install requests). Save as render.py and run: python render.py
# Uses the public sandbox key unless you set RENDLET_API_KEY=YOUR_API_KEY
import os
import requests
r = requests.post(
"https://rendlet.com/v1/pdf",
headers={"Authorization": "Bearer " + os.environ.get("RENDLET_API_KEY", "sandbox")},
json={
"html": "<h1>Hello</h1><p>Rendered by Rendlet.</p>",
"options": {"format": "A4", "margin": "15mm"},
},
timeout=60,
)
r.raise_for_status()
with open("hello.pdf", "wb") as f:
f.write(r.content)
print("saved hello.pdf;", r.headers.get("X-Quota-Remaining"), "renders left")
JSON + template → 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
For agents and serverless code
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.
Open the sandbox: edit HTML and render it →
Built-in JSON templates
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.
invoice
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
itinerary
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
Your own (HTML)
Send any HTML/CSS document. It's rendered in headless Chromium with print backgrounds, page size and margins you choose.
API reference
| 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. |
Responses and limits
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 / day / network | 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.
Pricing
Every plan includes both HTML and template rendering. A document counts as one successful render.
Free
$0
100 documents/month
Up to 10 pages each
No watermark
Starter
$7 /mo
1,000 documents/month
Up to 50 pages each
Email support
Pro
$19 /mo
5,000 documents/month
Up to 200 pages each
Priority support
Scale
$59 /mo
25,000 documents/month
Up to 500 pages each
Custom template on request
Paid plans are live: click Subscribe and paste your free key to upgrade it.
Prepaid credit packs
1,000 credits
$9
One-time. Never expire.
Used only after your monthly cap.
5,000 credits
$35
One-time. Never expire.
Used only after your monthly cap.
One credit = one document past your plan's monthly cap. Pay by card (Stripe) or with USDC on Base. Details.
Monthly caps (no overage billing)
- Every plan has a hard monthly cap: 100 (Free), 1,000 (Starter), 5,000 (Pro) or 25,000 (Scale) documents. You are never billed for extra documents.
- At the cap, prepaid credits (if any) are used one per document. With no credits left, requests return
429 quota_exceededwith anupgrade_url, acredits_urland the next plan, until the 1st of next month (UTC) or until you upgrade. Upgrading takes effect as soon as payment completes. - Failed renders (4xx/5xx) never count toward the cap.
X-Quota-Remainingshows what's left.
Refunds and cancellation
- Cancel any time. Your plan stays active until the end of the paid period, with no further charges.
- 7-day money-back guarantee: if you're not happy within 7 days of your first payment and have used fewer than 20% of the included documents, email us for a full refund.
- Credit packs: an entirely unused pack is refundable within 14 days of purchase; used credits are not refundable; USDC payments are refunded manually to the sending address on Base. Full terms.
- Service credits: if monthly availability drops below 99.5%, we credit 10% of that month's fee on request. Credits can't be exchanged for cash.
Frequently asked questions
Is there a free plan?
Yes. The Free plan includes 100 documents a month, up to 10 pages each, with no watermark. To try the API without signing up, the public sandbox key allows 5 free sandbox renders per day per network, 1 page each, with a SANDBOX watermark.
What happens when I reach my monthly cap?
You are never billed for extra documents. At the cap, prepaid credits (if you have any) are used one per document; otherwise the API returns 429 quota_exceeded with an upgrade URL until the 1st of next month (UTC) or until you upgrade.
Does Rendlet support Chinese text?
Yes. Both HTML and template modes include Noto Sans SC, which covers Latin and the 6,763 common GB2312 Simplified Chinese characters. For other scripts, embed a web font in your HTML.
Can AI agents and serverless code use Rendlet?
Yes. Add "response":"base64" to get JSON with the PDF as base64 instead of a binary stream. There is an OpenAPI 3.1 spec at /openapi.json and an MCP endpoint at /mcp.
Can I get a refund?
Cancel any time. If you are not happy within 7 days of your first payment and have used fewer than 20% of the included documents, email support@rendlet.com for a full refund. Entirely unused credit packs are refundable within 14 days.
Changelog
Last updated: October 20, 2026. Docs last checked 2026-10-18.
- 2026-10-20: Added the sandbox page, Node.js and Python snippets, and comparisons with wkhtmltopdf and self-hosted Puppeteer.
- 2026-10-20: Added an FAQ section and an About page.
- 2026-10-18: Overage billing removed. Every plan now has a hard monthly cap: at the cap the API returns 429 with an upgrade URL, and you are never charged for extra documents.
- 2026-10-18: Moved to rendlet.com. Paid plans are live through Stripe Checkout. Added the Markdown docs, the comparison page and llms.txt updates.
- 2026-10-18: Renamed from the working name PageForge to Rendlet.
- 2026-10-17: Usage metering and rate limits, email-issued hashed keys, the sandbox key, Simplified Chinese fonts (Noto Sans SC), and refund terms.
- 2026-10-17: First release:
POST /v1/pdf(HTML and JSON templates), invoice and itinerary templates, OpenAPI spec.