Skip to content
New — signed URLs and per-template webhooks

One request in, a finished PDF out.

Pagemint renders your invoices, contracts and reports from HTML or a visual template — versioned, fast, and identical every single time.

POST /v1/renderEditable — change a value
curl -X POST https://api.pagemint.dev/v1/render \
  -H "Authorization: Bearer $PAGEMINT_KEY" \
  -d '{
    "template": "invoice",
    "data": {
      "client": "Acme Corporation",
      "number": "INV-2026-0142",
      "due": "2026-11-07",
      "items": [
        { "label": "Brand identity design", "amount": 4000 },
        { "label": "Design system rollout", "amount": 2000 }
      ]
    }
  }'
200 OKapplication/pdf184 kB

Studio Aurora

Invoice INV-2026-0142

Unpaid

Billed to

Acme Corporation

123 Business Ave, Suite 400

Due

7 Nov 2026

Net 14

DescriptionAmount
Brand identity design$4,000.00
Design system rollout$2,000.00
Total$6,000.00
01 — Design

Templates that live in your repo.

Write them in HTML and CSS, keep them under review, and render them with the same engine your browser uses.

Templates you lay out, not code.

Start from a finished layout, drop in your logo and the fields you need, publish. The document that comes out is byte-for-byte the one the API returns.

Studio Aurora

Invoice

INV-2026-0142

Issued 24 Oct

Billed to

Acme Corporation

123 Business Ave, Suite 400

DescriptionHrsAmount
Brand identity40$4,000.00
Design system20$2,000.00
Total due$6,000.00
Pay toPL61 1090 1014 0000 0712 1981 2874

Agreement № MSA-118

Master Services
Agreement

between Studio Aurora and Acme Corporation

  1. 1.  Scope. The Supplier provides the services set out in each Statement of Work.
  2. 2.  Fees. Invoices are issued monthly and payable within fourteen days.
  3. 3.  Confidentiality. Survives termination by three years.

Marta Kowal

Supplier

J. Doe

Client

Page 1 of 9

Weekly operations

Week 33

On target
Renders
128,402
+12.4%
Failures
0.02%
−0.01pp
p95
1.2 s
+0.1 s

MonSun

invoice-v481,204
report-weekly32,118
contract-msa15,080

Boarding pass

LO 442

Warsaw

WAW

Lisbon

LIS

Gate
B12
Seat
14A
Boards
08:40
Zone
2

Kowal / Marta

Booking

QK7T2M

invoice-v4.html

Invoice

Two pages · A4 portrait · 14 merge fields

v4 · live

Every version, kept

A render always names the version it used, so a document issued last March still regenerates byte-for-byte today.

  • Preview a draft before you promote it
  • Pin a version per API key
  • Diff two versions side by side
  • Roll back without a deploy
  • Preview a draft before you publish it
  • Send a draft to a colleague for a look
  • Compare two versions side by side
  • Roll back in one click
02 — Automate

From a row in a table to a signed URL.

Call the API directly, or let Pagemint watch a source and deliver the finished file wherever it belongs.

From a spreadsheet to everyone's inbox.

Point Pagemint at a sheet, pick a template and a schedule. It renders every row and delivers the files while you are doing something else.

TriggerWebhook or direct callA new row in your sheet
MergeJSON meets the templateRow meets the template
RenderHeadless ChromiumSame engine, our machines
DeliverSigned URL or S3Email, Drive or Slack
03 — Integrate

Four lines in the language you already use.

One endpoint, one key, typed SDKs. Nothing to install on your servers and no headless browser to babysit.

Three ways in, no install.

Fill the form yourself, hand the work to a spreadsheet, or send a link and let the client fill it in. Nothing to deploy, nothing to maintain.

Reading notes.txt

notes.txtorders.xlsx
Client
Northwind Trading
Number
INV-2026-0143
Total
$1,240.00

However the data arrives, it lands in the same fields and comes out as the same document.

Studio Aurora

Invoice

×24

Billed to

Northwind Trading

DescriptionAmount
Consulting, August$1,040.00
Expenses$200.00
Total$1,240.00

Fill it in yourself

Pick a template, type the details, download. About as long as writing the email you were going to attach it to.

One document · 20 seconds

Let a spreadsheet do it

Every row becomes a document. Run it once, or leave it on a schedule and let the files arrive where your team already works.

500 rows · one run

Send a link instead

Share a form with a client or a colleague. They fill in their half, the finished PDF lands in your workspace.

No account needed for them

Outgrow the dashboard later?Every template you build here is already an API template — a developer can call it without rebuilding a thing.

One endpoint

Call it from anything that speaks HTTP.

Typed SDKs where you want them, a plain POST where you don't. Nothing to install on your servers, no headless browser to keep alive, no font cache to warm.

  • One key, scoped per environment
  • Idempotent by request id
  • The bytes back, or a signed URL

SDKs and clients

cURLNode.jsPythonPHPRubyGoJavaRust+6 more

Triggers and automation

WebhooksZapierMaken8nMCP server

This endpoint

Median latency
840 ms
Max payload
10 MB
Rate limit
120/min
curl https://api.pagemint.dev/v1/render \
  -H "Authorization: Bearer $PAGEMINT_KEY" \
  -d '{"template":"invoice-v4","data":{...}}' \
  --output invoice.pdf
import { Pagemint } from "pagemint";

const pm = new Pagemint(process.env.PAGEMINT_KEY);
const pdf = await pm.render({ template: "invoice-v4", data });
from pagemint import Pagemint

pm = Pagemint(os.environ["PAGEMINT_KEY"])
pdf = pm.render(template="invoice-v4", data=invoice)
use Pagemint\Client;

$pm = new Client(getenv('PAGEMINT_KEY'));
$pdf = $pm->render(['template' => 'invoice-v4', 'data' => $invoice]);
840 ms
Response200
{
  "id": "rnd_8fk21",
  "pages": 2,
  "bytes": 188432,
  "url": "https://…/inv.pdf",
  "expires_in": 3600
}
Why teams switch

The boring parts, handled.

Everything that makes self-hosted PDF generation a weekend project you maintain forever.

Deterministic

The same input always renders the same file.

  • Pinned Chromium build
  • Fonts bundled per template
  • Checksum on every render
14 Feb
sha256:9f2ac1…
16 Aug
sha256:9f2ac1…

Fast

Warm workers, so nothing cold-starts.

  • 840 ms median, single page
  • Asset cache per template
  • Renders in the region you pick

Private

Documents leave when you say so.

  • Files deleted after your TTL
  • EU and US data residency
  • Signed, expiring download URLs
We deleted the Puppeteer service, the font cache and the Lambda that restarted it every night. Three files of ours became one call to Pagemint.

Marta Kowal · Platform lead, Fenwick Logistics

Pricing

Pay for pages, not for seats.

Every plan carries the whole API and the whole dashboard. Drag the slider to what you actually render and the prices follow.

30,000

One rendered PDF page is one page, however it was made.

Change plan or leave whenever — the price follows your volume, not a contract.

Starter

A side project, or the first paying customer.

$79/ month

Billed monthly

Pages included
30,000
Then
$3.50 / 1,000
  • Unlimited templates and versions
  • Dashboard and full API
  • 3 API keys
  • 7-day file retention
  • Community support
Most popular

Growth

Documents in the critical path of your product.

$79/ month

Billed monthly

Pages included
30,000
Then
$3.50 / 1,000
  • Everything in Starter
  • Batch renders and webhooks
  • Data residency, EU or US
  • Custom file retention
  • Email support, one business day

Scale

High volume, tight latency, an SLA behind it.

$79/ month

Billed monthly

Pages included
30,000
Then
$3.50 / 1,000
  • Everything in Growth
  • Dedicated render pool
  • 99.99% SLA and priority queue
  • SSO and audit log
  • Shared Slack channel
  • 50 free PDFs every month
  • No card to start
  • Cancel in one click

Rendering documents for billing, logistics and legal teams since 2023

All systems operational

Pages rendered
41.8M
p95 render time
1.2 s
Uptime, 12 months
99.98%
Edge regions
14
Questions

Before you write the first call.

Can I keep my own HTML and CSS?

Yes. Post a URL, raw HTML, or a stored template. Anything Chromium renders, Pagemint renders — including web fonts, grid, and print stylesheets.

What counts as a page?

One rendered PDF page. A three-page invoice is three pages, whether you asked for it once or retried it — retries after our error are never counted.

Where are the files stored?

In the region you choose, behind signed URLs that expire on your TTL. Set the TTL to zero and we stream the bytes back without storing anything.

Do you support PDF/A and accessibility tags?

PDF/A-2b and PDF/A-3b are a flag on the render call. Tagged output follows the heading structure of your HTML, so semantic templates come out accessible.

What happens when I go over my plan?

Renders keep working. Overage is billed per thousand pages at your plan rate, and you get an email at 80% so nothing is a surprise.

Is there a way out?

Templates export as plain HTML and your renders export as a ZIP. Cancel in the dashboard, keep the files.

Render your first PDF in the next ten minutes.

Sign up, paste your key into the example, and watch a real document come back. The free tier never expires.