v1 · Public beta

PDF generation API for developers & AI agents

Generate perfect PDF from HTML with a single API call.

100 PDFs/mo free·Typed TS & Python SDKs·MCP out of the box
POST /v1/generate200 · 812ms
curl -X POST https://api.pdfend.com/v1/generate \
  -H "Authorization: Bearer pk_live_..." \
  -d '{"html": "<h1>Hello</h1>"}'
What's inside

Everything you need to print the web, nothing you don't.

A small set of primitives that compose well. Ship invoices, reports, certificates, or anything else your HTML can describe.

01

HTML to PDF

Send HTML + CSS, get a pixel-perfect PDF. Tailwind, Google Fonts, page breaks — all handled.

02

Template Engine

Store reusable templates with Handlebars. Send data, receive PDFs.

03

MCP Server

Let Claude, ChatGPT, and AI agents generate PDFs directly.

04

TypeScript & Python SDKs

First-class SDKs with full type safety.

05

Fast & Reliable

Sub-2-second generation. Chromium-powered rendering.

06

Simple Pricing

Free tier included. No surprises.

Integrate

Three lines, and you're shipping.

TypeScript, Python, or raw HTTP. Same endpoint, same response shape, same free tier.

import PDFend from "@pdfend/sdk";

const pdfend = new PDFend("pk_live_...");

const { url } = await pdfend.generate({
  html: `
    <h1>Invoice #1042</h1>
    <p>Amount due: <strong>$249.00</strong></p>
  `,
  options: {
    format: "A4",
    margin: { top: "1in", bottom: "1in" },
  },
});

console.log(url);
// → https://api.pdfend.com/v1/files/abc123.pdf
The pipeline

From HTTP request to stored PDF, in four steps.

01step

Send HTML or a template reference

Raw HTML for one-offs, a Handlebars template + data for reusable documents. One endpoint, one request.

02step

We render with Chromium

Your document loads in an isolated Chromium context, fonts auto-load, images fetch, then we print to PDF.

03step

Upload, store, and return a URL

The PDF lands in S3-compatible storage behind a signed URL. You get the URL back — attach to email, redirect users, store in your DB.

04step

Webhooks and logs

Async jobs POST to your webhook on completion. Every generation is in the dashboard with status, duration, and replay.

In the wild

What people build with PDFend.

Six patterns drive most of the traffic we see — none of them required more than the usual HTML templates you already ship.

01 / 06

Invoices and receipts

Per-user billing with branding, multi-currency, taxes, line items. Sync mode for instant delivery, async for month-end batches.

02 / 06

Reports and exports

Weekly KPI reports, quarterly board packets, audit logs. SVG charts print crisp, tables page-break cleanly.

03 / 06

Contracts and agreements

NDA, MSA, DPA templates with Handlebars variables. Headers, footers, page numbers — everything long documents need.

04 / 06

Certificates and tickets

Fixed-layout single-page documents. Custom fonts, backgrounds, QR codes rendered from SVG, pixel-perfect output.

05 / 06

AI agent outputs

Claude or your own agent produces a research summary or workflow result — turn it into a PDF via MCP, no integration code.

06 / 06

wkhtmltopdf migrations

wkhtmltopdf was deprecated in January 2023. PDFend is a drop-in HTTP replacement for the shell-out pattern.

Craft

Built like the tools you actually love.

Typed SDKs, real errors, a log viewer, an MCP server. The quality bar is Stripe, Resend, Linear — and it shows.

01

Every error is typed

PDFendError carries code, statusCode, requestId, and details. Catch, branch, retry. No string-parsing.

02

Async + webhooks

Long renders don't block your process. Fire, forget, receive a signed POST when it's done.

03

Full generations log

Every request, status, duration, size. Filter, replay, export. Debug production like a human.

04

Handlebars templates

Create once, render per call with data. Versioning, sample data for preview, all first-class.

05

Google Fonts auto-loading

Use any of 1,400+ families without extra <link> tags. Our renderer detects and injects.

06

MCP server for agents

Claude, Cursor, ChatGPT desktop. One config entry — your agent has native PDF tools.

Pricing

Simple, transparent, no surprise invoices.

Start on Free · Scale when you're ready

tier · 01
Free
For side projects
$0/mo

100 PDFs/mo

  • HTML to PDF
  • Community support
  • 1 API key
tier · 02
Starter
For small apps
$19/mo

2,000 PDFs/mo

  • Everything in Free
  • Template engine
  • Email support
  • 5 API keys
recommended
Pro
For growing products
$49/mo

10,000 PDFs/mo

  • Everything in Starter
  • MCP server access
  • Priority support
  • Unlimited API keys
  • Webhooks
tier · 04
Scale
For high-volume apps
$149/mo

50,000 PDFs/mo

  • Everything in Pro
  • Dedicated infrastructure
  • 99.99% SLA
  • Custom domains
tier · 05
Enterprise
For large organizations
Custom

Unlimited

  • Everything in Scale
  • On-premise deployment
  • Dedicated support
  • Custom contracts
FAQ

Frequently asked questions.

01How is PDFend different from running Puppeteer myself?
+
We amortize Chromium pooling, warm starts, and memory management across many customers. You pay for PDFs generated, not idle browsers keeping themselves warm. Typical Puppeteer-in-Lambda setups cost 3–10x more because each cold start spawns a fresh Chrome instance.
02What rendering engine do you use?
+
Chromium via Playwright. Same engine as Chrome and Edge. Full CSS3, Flexbox, Grid, Google Fonts auto-loading, SVG — everything renders exactly like it does in a browser.
03What SDKs do you offer?
+
TypeScript (@pdfend/sdk on npm), Python (pdfend on PyPI), and an MCP server for Claude Desktop, Cursor, and ChatGPT. The API is also plain HTTP + JSON so any language with an HTTP client works.
04Is there really a free tier?
+
Yes. 100 PDFs per month at $0, no watermark, no credit card, forever. Enough to validate a product idea end-to-end. Paid plans start at $19/mo for 2,000 PDFs.
05Do you support AI agents?
+
Yes — we ship an MCP (Model Context Protocol) server that exposes generate_pdf, generate_pdf_from_template, and list_templates as native tool calls for Claude Desktop, Cursor, ChatGPT desktop, and any MCP-aware agent. Install with a single npx command.
06How fast is a typical render?
+
Single-page invoices complete in 700–1200ms median. Bigger reports (20–50 pages with charts) take 3–8 seconds. Use async mode + webhooks for anything over 10 seconds so your process isn't blocked.
07Can I self-host PDFend?
+
Enterprise plans include on-prem deployment. The pipeline is Playwright + a Hono API with the same surface as the hosted service — it runs wherever Node runs. Contact sales for pricing.
08What about data privacy?
+
HTML is rendered in an isolated Chromium context per request, PDFs are stored encrypted in S3-compatible storage, and our SSRF protections block network requests to private IP ranges so you can't accidentally probe internal infrastructure via your own HTML.
Get started

Start generating PDFs in thirty seconds.

Create a free account, grab an API key, make your first request. Everything you read about above is already live.