# Rendlet PDF API: documentation

Last checked: 2026-10-18 · Base URL: https://rendlet.com · OpenAPI 3.1: https://rendlet.com/openapi.json

Rendlet turns HTML, or JSON plus a built-in template (invoice, itinerary), into a PDF with one HTTP call. Rendering uses headless Chromium.

## Quick start

```bash
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
```

Template mode: `{"template": "invoice", "data": {...}}`. `GET /v1/templates` returns a full example request for each template.

The public `sandbox` key allows 5 renders per IP per day (with a shared global cap), 1 page, up to 50 KB of HTML, and adds a watermark. To get a free key (100 documents a month), call `POST /v1/signup` or use the form at https://rendlet.com/#signup.

## Endpoints

| Endpoint | Purpose |
|---|---|
| `POST /v1/pdf` | Render a PDF. Body: `{"html": "..."}` or `{"template": "invoice"\|"itinerary", "data": {...}}`. Optional: `options.format` (A4, Letter, Legal, A3, A5), `options.landscape`, `options.margin`, `options.printBackground`, `filename`, `response` (`binary` or `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"}`. The key is returned once. |
| `POST /v1/checkout` | Start a paid subscription for your key: `{"plan":"starter"\|"pro"\|"scale"}`. Returns `{url}` for Stripe Checkout. |
| `GET /openapi.json` | OpenAPI 3.1 spec. |

## Responses and errors

Successful renders return the 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 works out of the box: Noto Sans SC is bundled and covers the 6,763 common GB2312 characters.

## Limits and pricing

| | Sandbox | Free | Starter | Pro | Scale |
|---|---|---|---|---|---|
| Price | $0 | $0 | $7/mo | $19/mo | $59/mo |
| 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 |

**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. At the cap, `POST /v1/pdf` returns HTTP 429 `{"error":"quota_exceeded","upgrade_url":"https://rendlet.com/#pricing","next_plan":...}` until the 1st of next month (UTC) or until you upgrade. You are never billed for extra documents. Failed renders never count.

**Refunds.** You can cancel any time. If you've used under 20% of your included documents, you can get a full refund within 7 days of your first payment. If monthly availability falls below 99.5%, you get a 10% service credit.

## Changelog

- 2026-10-18: Overage billing removed. Every plan now has a hard monthly cap, and at the cap the API returns 429 with an upgrade URL.
- 2026-10-18: Moved to rendlet.com. Paid plans are live, and the `/v1/checkout` endpoint was added. Added Markdown docs and a comparison page.
- 2026-10-18: Renamed from the working name PageForge.
- 2026-10-17: Added metering, rate limits, the sandbox key, Simplified Chinese fonts, and refund terms.
- 2026-10-17: First release.
