Launch offer · $199 lifetime access · limited time
Branded invoice PDFsin seconds. Code optional.
Developers send one POST request: JSON or a raw Stripe payload in, a locale-aware PDF out, nothing stored. Everyone else uses the free no-code designer below. Both get the same five templates.
Free renders are watermarked. No signup, no credit card.
- median round trip, measured
- ~0.5s
- median round trip, measured
- of your data stored
- 0 bytes
- of your data stored
- locales and currencies
- 40+
- locales and currencies
- deterministic output
- 100%
- deterministic output
Design an invoice right now
Use the controls, or edit the JSON directly if that is your thing. Free, watermarked, no signup. This playground is the actual API.
From data to document in one round trip
Send your data
POST invoice JSON, or forward the raw Stripe invoice, payment_intent, or checkout.session payload straight from your webhook.
We render it
Deterministic pdf-lib layout in a plain Node function. Totals computed in integer cents, text wrapped and paginated, your logo and accent color applied.
You get PDF bytes
Email it, archive it, stream it to the browser. Nothing is stored on our side; the same request always produces the same bytes.
Five templates, zero design work
These are real, unretouched renders from the engine. Send a logo and an accent color and every document comes out on-brand.

Clean
Accent color band, alternating rows. The default for SaaS and agencies.

Classic
Centered letterhead and ruled tables. Formal, conservative, timeless.

Bold
Full-width accent header. Shown here with the QR payment block.

Minimal
Hairlines and whitespace. The accent appears only where money is due.

Receipt
80mm thermal-style with dynamic height. Perfect for point-of-sale flows.
Your Stripe webhook already has everything. Turn it into an invoice.
Customers pay through Stripe, then ask for a proper invoice PDF with your logo, their VAT ID, and correct totals. Instead of building a PDF pipeline, forward the payload you already receive to /api/v1/from-stripe. Papermint maps line items, taxes, and amounts for you, to the cent.
- ✓ Works with invoice, payment_intent, and checkout.session payloads
- ✓ Supports current and legacy Stripe API payload shapes
- ✓ No 0.4% per-invoice fee, flat monthly pricing
- ✓ Zero-decimal currencies (JPY, KRW) handled correctly
- ✓ payment.url adds a scannable QR code and clickable pay link to the PDF
// Inside your Stripe webhook handler: the payload you
// already receive is the input. No re-fetching, no mapping code.
const res = await fetch("https://papermint.dev/api/v1/from-stripe", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAPERMINT_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
stripe_object: event.data.object, // invoice | payment_intent | checkout.session
seller: {
name: "Acme Studio LLC",
addressLines: ["100 Market St", "San Francisco, CA 94105"],
vatId: "US-EIN 88-1234567",
},
overrides: { branding: { accentColor: "#10b981" } },
}),
});
const pdf = await res.arrayBuffer();Ships in the time it takes to read this
One endpoint, standard HTTP. Works from any language, queue, or cron job.
curl -X POST https://papermint.dev/api/v1/invoice \ -H "Authorization: Bearer $PAPERMINT_KEY" \ -H "Content-Type: application/json" \ -d @invoice.json \ --output invoice.pdf
An honest comparison
General HTML-to-PDF services are great at what they do. Papermint only does invoices, which is exactly why it needs no template work and no browser.
| Papermint | HTML-to-PDF services | DIY Puppeteer | |
|---|---|---|---|
| Rendering engine | Deterministic pdf-lib, invoice-specific | Headless browser or Prince, generic HTML | Puppeteer + Chromium you maintain |
| Serverless cold start | None (plain Node function) | n/a (their servers) | 10-15s Chromium boot, bundle-size limits |
| Stripe payload mapping | Built in (/from-stripe) | You write it | You write it |
| Template work required | None: 3 templates, logo + accent color | Design and debug print CSS | Design and debug print CSS |
| Your invoice data | Never stored | Varies by vendor | Stays in your infra |
| Pricing model | Flat monthly, no per-invoice fees | Metered documents | Your engineering time |
Built to be trusted with billing data
Nothing stored
Rendering is stateless. Invoice data lives in the request and dies with the response.
Signed webhooks
Every Stripe event is verified against its signature before anything happens.
Scoped API keys
Keys are bound to your billing account and validated in constant time on every call.
Predictable failure
Structured errors with exact field paths. Over quota returns 429; nothing silently degrades.
Flat pricing, no per-invoice fees
Watermarked playground is free forever. Paid plans unlock the API.
Starter
$19/mo
500 PDFs/month, all templates, no watermark
- ✓ 500 PDFs per month
- ✓ All templates, no watermark
- ✓ /from-stripe endpoint
- ✓ Custom logo and accent color
14-day money back · cancel anytime
Growth
$49/mo
5,000 PDFs/month, priority support
- ✓ 5,000 PDFs per month
- ✓ All templates, no watermark
- ✓ /from-stripe endpoint
- ✓ Custom logo and accent color
14-day money back · cancel anytime
Launch Lifetime
$199 once
Pay once. 500 PDFs/month forever. Launch offer.
- ✓ 500 PDFs per month
- ✓ All templates, no watermark
- ✓ /from-stripe endpoint
- ✓ Custom logo and accent color
14-day money back · cancel anytime
Questions, answered honestly
Is this a legally compliant e-invoice for the EU?
No, and be careful with anyone who tells you a PDF is. Germany and France are phasing in structured XML e-invoicing (XRechnung, Factur-X) for B2B in 2026. Papermint produces professional PDF invoices, which remain the standard for most B2C and cross-border billing. Factur-X hybrid output is on the roadmap.
Why not just use Stripe's hosted invoices?
Stripe Invoicing charges 0.4% per paid invoice and its layout is rigid. Papermint gives you full branding at a flat price, works with payment_intents and checkout sessions that never had a Stripe invoice, and produces documents for customers who ask for a proper invoice PDF after paying.
What happens if I go over my monthly quota?
Requests return HTTP 429 with a clear message. Nothing silently breaks and you are never charged overages. Upgrade or wait for the next month.
Do you store my invoice data?
No. Rendering is stateless: your JSON comes in, the PDF goes out, and nothing is persisted. Billing runs entirely on Stripe.
Can I try it without paying?
Yes. The playground on this page renders watermarked previews free, no signup. Paid keys remove the watermark and unlock the API.
How fast is it, really?
A typical invoice renders in well under a second, because there is no browser to boot. The engine is a pure layout pass over your data with an embedded font.
Stop maintaining a PDF pipeline.Start sending invoices.
Your first render is 30 seconds away. Try the playground free, or grab a key and ship the integration before lunch.