
Fallback document
Any JSON becomes a clean document
No template sent, none matched, so Quire laid the data out itself: header from title and from/to, short fields in a panel, the array as a table.
render(data)One API call turns your app's data into invoices, receipts, quotes and reports. No template to design first: Quire reads the shape of your data and sets the page.
npx quirepdf-cli login
✓ Saved render of data.json. Edit the JSON and the page re-renders.
One endpoint, three outcomes. Name a template only when you want that exact layout.

Fallback document
No template sent, none matched, so Quire laid the data out itself: header from title and from/to, short fields in a panel, the array as a table.
render(data)
Detected invoice
The data had what an invoice needs (number, dates, seller, customer, items), so the invoice template was picked automatically.
render(data)
Named certificate
Asking for template=certificate validates the data against that template's schema and renders exactly that layout.
render(data, { template: "certificate" })Each takes your brand colour and currency. Open one to see its fields and sample data.
Name a template and your editor checks the data before you send it.
import { Quire } from "quirepdf";
import { writeFile } from "node:fs/promises";
const quire = new Quire(); // reads QUIRE_API_KEY
const pdf = await quire.render(order); // any JSON object
await writeFile("order.pdf", pdf.bytes);from quirepdf import Quire
quire = Quire() # reads QUIRE_API_KEY
quire.render(order).save("order.pdf")curl https://api.quirepdf.dev/v1/render \
-H "Authorization: Bearer $QUIRE_API_KEY" \
-H "Content-Type: application/json" \
-d @order.json -o order.pdfnpx quirepdf-cli login you@example.com
npx quirepdf-cli render order.json # writes order.pdf$ npx quirepdf-cli render bad.json -t invoice ✗ data has 2 problems • seller is required • items[0].qty must be a number
Ask for a document in plain words. The agent fills in the data and saves the PDF.
$ claude mcp add quire \
--env QUIRE_API_KEY=qk_live_… \
-- npx -y quirepdf-mcpMake a PDF receipt for Maya Chen's annual Team plan, $1,188, paid today by Visa ending 4242.
● render_document saved receipt-2026-10-03.pdf, receipt template, 1 page
Done. The receipt is in your working folder. I filled the payment method and marked it paid.
Most PDF APIs print HTML in headless Chrome. Quire typesets your data directly with a compiled engine.
| Measured | Quire | Headless Chrome |
|---|---|---|
| One-page invoice | 4 ms | 800–2,000 ms |
| Four pages, 60 line items | 12 ms | Not measured |
| Fourteen pages, 300 line items | 48 ms | Not measured |
| Server memory under load | 54 MB | 200–400 MB per browser |
| Plan | Renders a month | Price | Good for |
|---|---|---|---|
| Free | 100 | Free | No card needed |
| Starter | 2,000 | $19/mo | Side projects and small apps |
| Pro | 15,000 | $49/mo | Growing products |
| Scale | 75,000 | $99/mo | High-volume billing runs |
Paid plans open shortly. The free plan is live now.
No. Send any JSON object to POST /v1/render and you get a PDF back. If your data looks like an invoice, receipt, quote, credit note, statement or certificate, Quire uses that template. Otherwise it lays the data out as a clean document: a header from title, from and to, short fields in a details panel, and arrays as tables.
The free plan includes 100 renders a month with no card. Paid plans are $19, $49 and $99 a month for 2,000, 15,000 and 75,000 renders. Only successful renders count; validation is free.
Yes. Every template takes your brand colour (accent) and currency symbol, and uses your company name for the letter mark. Uploading fully custom templates is on the roadmap.
No. Each document is rendered in memory and returned in the response. Quire keeps a monthly count of renders per account for billing, not the data or the PDFs.
There's no browser involved. Quire typesets with a compiled engine, so a one-page invoice renders in about 4 ms, page breaks and repeating table headers come out right, and you don't run Chrome in production. You send data, not HTML.
The templates are written in Typst, an open-source typesetting system, and Quire runs its compiler as a library inside a Rust service. You never write Typst to use Quire: you send JSON and get a PDF. If you already know Typst, you'll recognise the typography.
Yes. The MCP server (npx -y quirepdf-mcp) gives agents like Claude tools to render documents, check data and look up template fields. The CLI and SDKs also have machine-readable output.
Anything that can make an HTTP request. There are typed SDKs for TypeScript/JavaScript (npm i quirepdf) and Python (pip install quirepdf), plus a CLI.