POSTapi.pdfpipe.xyz/v1/pdf
HTML goes in.
A finished PDF
comes out.
PDFPipe is the rendering layer between your app and the file. Send HTML, a URL or a saved template with JSON; the browsers, queues, retries and fonts are ours to run. Most documents render in under a second on our side (median 0.3 s).
100 documents a month free. No card.
Your request
Authorization: Bearer pp_live_••••••••
{
"html": "<article class=\"invoice\">…</article>",
"options": {
"format": "A4",
"margin": "18mm",
"tabular_nums": true
}
}One request, drawn with sample values. The stages are the ones every render goes through and the headers are the ones every response carries. The real renderer is in the next section.
Inside PDFPipe
- 01ValidateKey, quota and payload checked
- 02QueueAdmitted by plan priority
- 03LoadWaits for styles, fonts, images
- 04PrintA4, 18 mm margins
- 05CheckOutput verified as a PDF
- 06DeliverBytes back, or stored with a link
The file210 × 297 mm
waiting for the response…
02 In thirty seconds
Send HTML, a URL or a template. Get the finished PDF back.
One request in, one file out. The same call works from your code or from an AI agent.
Using an AI agent? Install the MCP server npx -y pdfpipe-mcp-server
03 The real renderer
Edit a document. Render it with the live API.
Change the markup, the data, the page size or the margins and watch the layout move. When it looks right, send it: the PDF below then comes from the same renderer your key will use.
04 The hard part
Printing a web page is easy once. Doing it all day is infrastructure.
On a laptop, a headless browser and a print call look like the whole job. In production they turn into a fleet: pinned browser versions, the same fonts on every box, a queue in front, memory limits, timeouts, retries, and somebody on call when month-end invoices stall.
Most teams build that layer by accident, one incident at a time, and then maintain it forever. PDFPipe is that layer, already built. Here is what it does at each stage of a render.
the row is cut by the page edge
the row moves to page 2, whole
01Validate
What goes wrongBad options and oversized payloads fail late, after the work was paid for.
What PDFPipe doesFormats, margins and options are checked before anything renders. HTML up to 5 MB, URLs up to 2,048 characters. Quota is taken atomically, so two requests can never both spend the last document.
400 invalid_request413 payload_too_large402 quota_exceeded02Queue
What goes wrongMonth-end spikes start a browser per request until memory runs out.
What PDFPipe doesAn admission queue holds each render until a browser is free. Scale, Business and Enterprise wait in a priority lane. Nobody hangs: past the lane's wait you get a 503 with Retry-After.
503 renderer_unavailableRetry-After: 503Load
What goes wrongFonts and images arrive after the print. Untrusted HTML reaches your internal network.
What PDFPipe doesPrinting waits for stylesheets, then fonts and images, up to a cap, and names whatever failed. Every request the page makes, redirects included, is checked against private address space.
X-PDFPipe-Warnings400 ssrf_blocked04Print
What goes wrongRows split across pages. Headers, footers and page numbers need their own layout pass.
What PDFPipe doesPrint CSS is honoured: break-inside, @page sizes with prefer_css_page_size. header_html and footer_html run on every page with .pageNumber and .totalPages, and margins widen to fit them.
Server-Timing: load, print05Check
What goes wrongA browser that crashes mid-render hands back a blank or broken file, and it still counts.
What PDFPipe doesTransient browser failures are retried with backoff on every plan, keeping the render's place. The output has to be a PDF before it leaves. A render that fails is refunded to your quota.
X-PDFPipe-Retried: true06Deliver
What goes wrongFiles that need a server to hold them, links anyone can open, callbacks nobody can verify.
What PDFPipe doesThe bytes come back in the response. With store: true the file is kept for your plan's retention, behind your key, with signed expiring links to share. Render webhooks are signed to the Standard Webhooks spec.
X-PDFPipe-Document-Idwebhook-signature
05 Limits you can read
Every response says where you stand.
Plan, usage, limit and what is left ride on every PDF response, so your code can warn before it runs out instead of finding out from a customer.
There is no overage. At the limit, the next request gets a 402 with the upgrade options and the reset date, never a surprise line on an invoice. Failed renders are refunded and do not count.
Starter plan, 3,000 documents a month. Drag to move through the month.
HTTP/1.1 200 OK
Content-Type: application/pdf
X-PDFPipe-Plan: starter
X-PDFPipe-Usage: 2962
X-PDFPipe-Limit: 3000
X-PDFPipe-Remaining: 38
X-PDFPipe-Cache: miss
Server-Timing: queue;dur=0, load;dur=118, print;dur=164, total;dur=352Example values. Header names and the 402 body are the API's own.
06 Start
Your first PDF, in the time it takes to read this section.
- 1
Get a key
Sign up with an email. The key is issued on the spot, 100 documents a month, no card.
- 2
Send one request
HTML, a URL, or a template id with data. The PDF comes back as the response body.
- 3
Keep it or stream it
Save the bytes yourself, or add store: true and fetch it later by id or a signed link.
curl https://api.pdfpipe.xyz/v1/pdf \
-H "Authorization: Bearer $PDFPIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"html": "<h1>Invoice #4012</h1>", "options": {"format": "A4"}}' \
-o invoice.pdfSDK source on GitHubEvery render optionFramework guidesOpenAPI spec
07 Rate card
A flat monthly price for a fixed number of documents.
One document is one render, whatever its length. No credits, no multipliers, and no overage: at the limit you get a 402, not a bill.
Prices in USD. Upgrades apply the moment payment clears.
Hobby
Key issued instantly. No card.
$0 /mo- Documents / month
- 100
- Batch
- none
- Storage
- 1 day
- Support target
- 72 h, best effort
- Seats
- 1
Starter
Password-protected PDFs.
$19 /mo- Documents / month
- 3,000
- Batch
- 10 per call
- Storage
- 30 days
- Support target
- 48 h
- Seats
- 1
Growth
Render webhooks and delivery history.
$49 /mo- Documents / month
- 15,000
- Batch
- 50 per call
- Storage
- 1 year
- Support target
- 24 h
- Seats
- 1
Scale
Priority render lane. 99.9% SLA with credits.
$149 /mo- Documents / month
- 50,000
- Batch
- 100 per call
- Storage
- 2 years
- Support target
- 8 h
- Seats
- 2
Business
Audit log. 99.9% SLA with credits.
$299 /mo- Documents / month
- 100,000
- Batch
- 250 per call
- Storage
- 2 years
- Support target
- 8 h
- Seats
- 5
Enterprise
Invoice billing, custom terms.
Custom- Documents / month
- Set in contract
- Batch
- 500 per call
- Storage
- Custom
- Support target
- 4 h
- Seats
- Unlimited
Every plan: the full API, both SDKs, the MCP server, retries on failed renders, and failed renders refunded.
Scale and Business: a 99.9% monthly uptime SLA with service credits, measured on the status page.
Stored documents need your key to open; share them with signed, expiring links.
Refunds: not happy in the first 14 days, email and get your money back.
08 Questions
Before you wire it in.
Something else? hello@pdfpipe.xyz reaches the person who wrote the renderer.
What do you do with the HTML and PDFs I send?
What do you do with the HTML and PDFs I send?
Renders run in an isolated environment with no stored credentials. Unless you set store: true, a PDF rendered from HTML is held in a short-lived cache scoped to your account for up to 10 minutes, so an identical request is served instantly, then discarded. With store: true it is kept for your plan's retention window and deleted automatically after it. Document content is never read, trained on, or shared. The security page has the detail.
How fast is a render, and what if one fails?
How fast is a render, and what if one fails?
Most documents render in under a second on our side (median 0.3 s); pages that pull remote fonts or images take as long as those take to arrive. Every render returns a valid PDF or a structured error with a code. Transient browser failures are retried automatically on every plan, and a render that still fails is refunded to your quota.
What happens at my monthly limit?
What happens at my monthly limit?
The next request returns HTTP 402 with the upgrade options and the date your allowance resets, so your code can handle it. There are no overage charges on any plan. Upgrade at any time and the new limit applies as soon as payment clears.
Can I store documents and share links?
Can I store documents and share links?
Yes. Add store: true to a render and you get a document id and URL back. Opening that URL needs your API key; for a link you can hand to someone else, call POST /v1/documents/:id/link for a signed, expiring URL.
Do you have an uptime commitment?
Do you have an uptime commitment?
Scale and Business include a 99.9% monthly uptime SLA with service credits, measured on the public status page. Support targets run from 72 hours best effort on Hobby to 4 hours on Enterprise.
Which languages does it work with?
Which languages does it work with?
Anything that can send an HTTPS POST. There are first-party SDKs for Node.js (pdfpipe-node) and Python (pdfpipe-python), an n8n node, and an MCP server for AI agents. Everything else uses its own HTTP client.
Is there a refund policy?
Is there a refund policy?
Yes. If you are not happy within the first 14 days, email hello@pdfpipe.xyz for a full refund. After that you can cancel at any time and keep access to the end of the billing period.
One request away from your first page.
curl https://api.pdfpipe.xyz/v1/pdf \
-H "Authorization: Bearer $PDFPIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}' -o page.pdf