Code in. Document out.
HTML to PDF in one API call.
Send HTML, get a pixel-perfect PDF in about a second. The document layer for teams that generate invoices and reports on a schedule, built to stay up on the last day of the month when finance depends on it.
500 free documents every month. Forever. No card.
curl -X POST https://api.pdfpipe.xyz/v1/pdf \
-H "Authorization: Bearer pp_live_…" \
-d '{"html":"<h1>Invoice #4012</h1>…",
"options":{"format":"A4"}}' \
-o invoice.pdfInvoice
#4012
BILLED TO
Acme Corp
14 Harbour Road
ISSUED
12 June 2026
Due in 14 days
Rendered by PDFPipe · pixel-perfect · A4
500
free documents / month
20+
languages and frameworks
< 3 s
median render time
14-day
refund, no questions
Edit the source. Watch it render.
This runs against the live API, right now. Change the markup on the left, render the document on the right. Ten free renders a day here, no account. Grab a free key for 500 a month.
Hit Render to see your PDF appear here.
One call in. A rendered document out.
No print servers, no font wrangling, no queue to operate at month-end.
- 01
SEND
POST your HTML, a URL, or a saved template with JSON data. Plain curl, or the Node and Python helpers.
- 02
RENDER
We render in an isolated, locked-down environment. Fonts, page breaks, headers, and footers are handled for you.
- 03
RETURN
The raw PDF streams back in about a second, ready to hand to your user or save to your storage. Add a flag to get a hosted URL with a retention window too.
- 04
KEEP
Documents stay retrievable based on your plan: one day on Hobby, up to two years on Scale. Re-download or stream them whenever you need.
You could build this yourself.
Your own renderer or a third-party library: they all work, until they do not. Here is what the tradeoff actually looks like.
Self-hosted
- A rendering dependency to install, version-pin, and keep updated
- Font loading issues on Linux servers
- Memory leaks at high volume
- Crashes on month-end spikes
- You own every outage
- Pages that cut wrong at print boundaries
- 0 lines of your product shipped
Works until it does not.
Other PDF APIs
- Credits and size multipliers
- Overage charges with no warning
- Rate limits hidden in the fine print
- No free tier worth testing with
- Support tickets into the void
- Vendor lock-in via proprietary template DSLs
- Migration pain when pricing changes
Predictable until the bill.
PDFPipe
- One POST request
- Plain HTML you already know
- Flat monthly price, no credits
- 500 free docs forever to test with
- Founder answers support personally
- 14-day refund, no questions
- API key in seconds, not a ticket queue
Predictable, permanently.
Get your API key →One API, every workbench.
Official libraries and integrations, all open source, all one install away.
REST API
Any language, three lines of curl. The whole reference fits on one page.
curl https://api.pdfpipe.xyz/v1/pdfRead the docs →Node.js
Typed SDK for Node 18+, Bun, and edge runtimes. Returns bytes plus your live usage.
npm install pdfpipe-nodeView on npm →Python
One class, two methods. Plays nicely with Django, FastAPI, and plain scripts.
pip install pdfpipe-pythonView on PyPI →n8n
Drop PDFPipe into any workflow: invoice on order, certificate on signup, no code.
n8n-nodes-pdfpipeCommunity node →AI agents · MCP
Give Claude, Cursor, or any MCP client the power to produce real documents.
npx pdfpipe-mcp-serverView on npm →Something else?
Zapier and Make integrations are in progress. Email to move yours up the list.
[email protected]Email the founder →Built like infrastructure you can actually trust.
Four things matter when documents are part of your product: how they look, what they cost, how safe the render is, and whether your agents can wire it up unattended.
500 free documents every month. Forever. No card. Ten times the usual free allowance, because side projects deserve real limits.
- 01 / OUTPUT
Pixel-perfect page geometry
Real A4 or Letter, true margins, repeating headers and footers, page numbers, embedded fonts. It looks printed because it is rendered like print, not screenshotted.
A4 · Letter · A3 · customrunning headers · footers · page numberstabular numerals · PDF/A · image dedup - 02 / TRUST
Flat pricing, no surprises
A document is a document. No credits, no size multipliers, no overage ambushes. The number on this page is the number on your card, every month.
Flat monthly price. Hard quota. No overages. - 03 / SECURITY
Sandboxed by default
Each render runs isolated, with no credentials and no route to private networks. Document services are a classic attack target. Ours is built like one.
isolated renderno private network accessno stored secrets - 04 / AGENTS
Built for AI agents
A first-class agent integration and docs a copilot can wire up in one shot. When your assistant adds invoicing, it reaches for this.
one-shot setupstructured errorsidempotent calls
Common patterns, ready to ship.
One API, any document. These are the patterns teams reach for most often.
Invoice PDF API
Generate invoices from a Handlebars or Jinja2 template with one POST. Return raw bytes or a stored download link.
Read the guide →
Report PDF API
Monthly analytics reports with KPI cards, data tables, and cover pages. Batch-generate for every account on a cron schedule.
Read the guide →
Certificate PDF API
Course completion certificates with custom fonts and layout. Issue on a webhook, store the URL, send the link in the email.
Read the guide →
The price below is the price on your card.
No credits, no size multipliers, no overage ambushes. Pick a tier, get your key the moment payment clears, render in minutes. Every plan includes the full API and the document archive.
Annual billing saves the equivalent of 2 months. Invoices sent on renewal.
Upgrade any time. Your limit lifts the moment payment clears.
Hobby
Side projects and prototypes
$0 /mo
500 docs / mo
free per document
· API key issued instantly. No card.
· 1-day archive
500 free documents every month. Forever. No card.
Starter
Small apps and early-stage products
$15.17 /mo
billed $182/year
3,000 docs / mo
~ $0.0063 / doc
· Email support
· 30-day archive
· Batch up to 10 per call
6× the docs, plus 30-day archive and batch rendering
Cancel anytime · No contracts
Growth
PopularGrowing products at scale
$39.17 /mo
billed $470/year
15,000 docs / mo
~ $0.0033 / doc
· Priority support
· 1-year archive
· Batch up to 50 per call
15,000 documents a month at $0.0033 per render.
Cancel anytime · No contracts
Scale
High-volume production workloads
$119.17 /mo
billed $1,430/year
50,000 docs / mo
~ $0.0030 / doc
· Priority support, 99.9% availability target
· 2-year archive
· Batch up to 100 per call
· 2 team seats
Cancel anytime · No contracts
Business
Engineering teams shipping document-heavy products
$239.17 /mo
billed $2,870/year
100,000 docs / mo
~ $0.0030 / doc
· Up to 5 team seats, audit logs
· 2-year archive
· Batch up to 250 per call
· 5 team seats
Cancel anytime · No contracts
Enterprise
High-volume teams with custom requirements
Custom /mo
100k+ docs / mo
volume pricing
· Custom SLA, invoice billing, dedicated support
· Custom retention
· Custom batch limits
· Unlimited seats
Cancel anytime · No contracts
Included in every plan
Document archive requires a free account. Sign up free to access stored PDFs.
When your monthly quota is reached, requests return a 402 error with a resets_at timestamp. No overages. No surprise charges. Upgrade any time to raise your limit.
* Document archive is accessible via your dashboard (sign-in required) or the /v1/documents API with your Bearer key.
Enterprise · Custom pricing
Unlimited volume. Dedicated support. Built around your requirements.
- · Unlimited documents per month
- · Custom data retention window
- · Dedicated SLA with response time commitments
- · SSO and SAML (roadmap)
- · DPA and vendor forms handled personally
- · Self-hosted deployment available
- · Invoice billing
Before you wire it in.
What do you do with the HTML and PDFs I send?
Renders run in an isolated environment with no stored credentials. By default your PDF is streamed back and not retained. Storage only happens when you explicitly set store: true, and then only for your plan's retention window, after which it is deleted automatically. Your document content is never read, trained on, or shared. See the security page for the full detail.
What happens if a render fails or times out?
Every render either returns a valid PDF or a structured error with a clear code. There are no half-rendered files and failed requests do not count against your monthly quota. Median render time is under three seconds. If you need a guaranteed response-time commitment in writing, that is covered on Scale and above.
What happens if I go over my monthly limit?
Requests that exceed your limit return a clear 402 error so your code can handle it gracefully. You can upgrade at any time and your limit resets immediately. We never silently drop requests or surprise you with overage charges.
Is there a refund policy?
Yes. If you are not satisfied within the first 14 days, email [email protected] and I will refund you in full, no questions. After that, you can cancel any time and keep access through the end of your billing period.
Can I not just render PDFs myself?
You can, and many do, until the 2 a.m. incident where it leaked memory and took checkout down with it. We handle the rendering engine, queues, retries, and font loading so your team ships product instead of operating document infrastructure.
How is this different from converter sites?
Those are for a person converting one file. PDFPipe is for software that creates documents on its own: every order, every signup, every month-end, with data filled in and nobody clicking anything.
What languages and frameworks does it support?
Anything that can make an HTTP POST request. The core API works from curl, Node.js, Python, Ruby, Go, PHP, Java, Rust, Elixir, and any other language. We publish first-party SDKs for Node.js and Python. Everything else uses plain fetch or your language's HTTP client.
Can I store documents and share download links?
Yes. Add store: true to any render request and the PDF is stored in our CDN for the retention period on your plan. You get back a document ID and a pre-signed URL. You can also query document metadata (filename, size, expiry) without downloading the full file.
Can I upgrade mid-month, and how does billing work?
Yes. Upgrade any time from your dashboard and the higher monthly limit applies immediately, no waiting for the next cycle. Billing is handled by our payment provider, which adjusts your charge for the change so you are not double-billed for the time you have already paid. You keep the same API key and the same subscription.
Why are my custom fonts not loading?
Include fonts using absolute-URL link tags or @font-face rules pointing to a hosted URL. Relative paths and local font files are not reachable from the render engine. Google Fonts links work as-is.
Why are external images or stylesheets missing?
External assets must use absolute HTTPS URLs. Relative paths and data URIs work fine. Assets behind authentication, cookies, or private CDNs will not load. When in doubt, inline critical CSS directly into your HTML.
How do I control where pages break?
Use CSS page-break-before: always or break-inside: avoid on your containers. Pass the format option (A4, Letter, etc.) in your request to set the paper size. The engine splits content automatically at the page boundary; explicit break rules let you control exactly where.
I build document pipelines for a living, and every company I have worked with ends up with the same haunted corner of the codebase: the PDF service. Nobody wrote it on purpose. Nobody wants to touch it. It falls over on the last day of the month, exactly when finance needs it.
PDFPipe is me fixing that once, properly, for everyone. Small team, no investors to impress, no plan to get acquired and sunset your integration. If it ever shuts down, you get a year of notice and an export button. In writing.
Questions go straight to [email protected]. I answer everything myself, usually same day.
Ship your first document today.
Pick a plan, get your key, render your first PDF in minutes. Or try the render console free, right now.