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.

generate.ts
"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
Acme Corp
Quarterly Revenue Report

Q3 2026

Quarterly Revenue Report

Highlights

Revenue up 34% QoQ. New enterprise tier launched.

SegmentRevenueGrowth
Enterprise$1.2M+41%
Pro$480K+28%
Starter$96K+12%
Confidential · Acme CorpPage 1 of 8

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.

report.md
# 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
report.pdf8 pages

Q3 2026

Quarterly Revenue Report

Highlights

Revenue increased 34% QoQ, driven by enterprise growth.

SegmentRevenueGrowth
Enterprise$1.2M+41%
Pro$480K+28%

Page 1 of 8 · Confidential

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.

response.json
"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.

Browse the warning catalog →

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.