Hosted PDF API
Markdown in.
A PDF worth keeping out.
One endpoint that turns Markdown or HTML into a branded, production-ready PDF — paginated, typeset, stored, and ready to download. No Puppeteer. No serverless rendering. No template wrangling.
Built for the stack you already ship on: Next.js · Vercel · Supabase · server routes
From npm install to first PDF
Five lines. One signed URL back.
Install the SDK, call one verb, and Paperbase returns a signed link to a finished PDF — with a preview image, page count, and structured warnings you can act on in code.
"tok-keyword">import { Paperbase } from "paperbase"; "tok-keyword">const paperbase = new Paperbase({ apiKey: "tok-keyword">process.env.PAPERBASE_API_KEY! }); "tok-keyword">const result = "tok-keyword">await paperbase.pdf.generate({ input: { type: "markdown", content: "# Q3 Report\n\n…" }, template: "report", theme: { logo_url: "https://…", accent_color: "#ff4e8c" }, }); // result.url → signed URL to the PDF // result.page_count → number of pages // result.warnings → structured, fixable warnings
Q3 2026
Quarterly Revenue Report
Revenue up 34% QoQ. New enterprise tier launched.
| Segment | Revenue | Growth |
|---|---|---|
| Enterprise | $1.2M | +41% |
| Pro | $480K | +28% |
| Starter | $96K | +12% |
The output is the pitch.
Why not just use Puppeteer
You could wire up Chromium.
Then you maintain it.
Generating PDFs yourself means running a headless browser in production — and owning every failure mode that comes with it. Paperbase is that whole layer, hosted.
Roll your own
- Bundle Chromium into a serverless function and fight the size limit
- Debug cold starts and timeouts under real traffic
- Load fonts deterministically so renders don't drift
- Paginate long tables and repeat headers by hand
- Design a decent-looking template from a blank page
- Patch the SSRF hole you didn't know you had
Call one endpoint
- Managed rendering — no Chromium in your bundle
- Font determinism and pagination handled for you
- Editorial typography and brand themes built in
- SSRF protection and sandboxed rendering by default
// the whole thing
const { url } = await paperbase.pdf.generate({
input: { type: "markdown", content: md },
template: "report",
});What's in the box
A rendering layer that already knows how to make a document look good.
Editorial typography
A hand-tuned baseline stylesheet turns raw Markdown into properly typeset output — not a browser's default HTML dump.
Brand themes
Pass a logo, colors, and fonts. Themes apply to the built-in templates and to your own HTML via CSS variables.
Structured warnings
When a render is imperfect, you get a machine-readable warning with a suggested fix — not a silent, subtly-broken PDF.
Storage & signed URLs
Every render comes back as a signed download link with a preview image and page count. No bucket to configure.
Markdown or HTML in
Send Markdown for the fast path, or your own HTML and CSS when you need full control of the layout.
Typed SDK & OpenAPI
A dual CJS/ESM TypeScript SDK, plus an OpenAPI 3.1 spec at api.paperbase.dev/openapi.json.
The report template
Plain text goes in one side.
A branded report comes out the other.
Point template: "report" at your Markdown and Paperbase handles the cover, table of contents, running headers, page numbers, and theme.
# Quarterly Revenue Report **Period:** Q3 2026 ## Executive Summary Revenue increased **34%** quarter-over-quarter, driven by growth in the enterprise segment. | Segment | Revenue | Growth | |------------|---------|--------| | Enterprise | $1.2M | +41% | | Pro | $480K | +28% | | Starter | $96K | +12% | ## Highlights - New enterprise tier launched July 1 - Net revenue retention hit 118% - 3 Fortune 500 logos added
Q3 2026
Quarterly Revenue Report
Revenue increased 34% QoQ, driven by enterprise growth.
| Segment | Revenue | Growth |
|---|---|---|
| Enterprise | $1.2M | +41% |
| Pro | $480K | +28% |
Errors that tell you what to do
Every warning ships with a fix.
Rendering problems don't fail silently. Each warning is a structured object with a plain-language message, a suggested fix, and a link to the docs — designed to be read by a person or acted on in code.
"warnings": [
{
"code": "PB_TABLE_HEADER_NOT_REPEATING",
"severity": "warning",
"message": "Table header does not repeat across pages.",
"suggested_fix": "Wrap the header row in <thead> so it
repeats on every page the table spans.",
"docs_url": "https://paperbase.dev/docs/warnings/
PB_TABLE_HEADER_NOT_REPEATING"
}
]Human-readable
A message you can drop straight into a log or surface to a user.
A concrete fix
Not "something went wrong" — the exact change that resolves it.
Docs on every code
Each of the twelve warning codes has its own reference page, auto-generated from the catalog.
200, not 500
A render with warnings still succeeds. You decide whether to ship it or fix it first.
Free to start
Ship your first PDF in five minutes.
100 renders a month on the free tier. No credit card, no Chromium, no template from scratch.