Everything between "template" and "delivered PDF"
KimiDoc is a document pipeline, not a screenshot tool: templating, batch orchestration, post-processing, and delivery, engineered as one system.
Batch jobs at payroll scale
Submit a template plus 40,000 data rows. Poll or get a webhook. Failures are per-document, so one bad record never kills the run, and jobs survive restarts.
Encryption & permissions
AES-256 with per-recipient passwords straight from your data
({{employee.dob}}), plus no-print / no-copy / no-modify restrictions.
Watermarks & assembly
Stamp DRAFT / COPY / VOID across every page, prepend cover pages, append terms & conditions, server-side, per document.
Templates & assets
Start from 100+ ready-made templates across 20 categories,
store yours with sample data, upload logos and fonts once and reference them
as asset://logo.png. No data-URI bloat, works fully offline.
AI template generation
Describe the document, get an editable template with sample data. Bring your own OpenAI-compatible key, or configure one server-wide; KimiDoc hosts no model and never stores your key.
Real paged media
Page numbers, running headers and footers with plain CSS
@page, with no JavaScript hacks. Custom page sizes down to 80 mm
receipt rolls.
Streaming & webhooks
NDJSON streaming input for batches beyond request-size limits, ZIP output with a reconciliation manifest, HMAC-signed completion webhooks.
Always warm. Never spawning.
The common way to render HTML to PDF is to launch a browser per document and pay for it in latency and memory: a launch costs hundreds of milliseconds before rendering even begins, and each instance wants hundreds of megabytes. KimiDoc keeps a fixed pool of renderers warm and routes every request to one that is already running.
No cold starts
Your request never waits for a browser to boot. The pool is up before the request arrives, which is why single documents come back while your user is still watching the spinner.
Queue, not fork
Under load, documents queue onto the fixed pool instead of forking processes until memory runs out. Throughput stays steady and the machine stays predictable, through a 40,000-document run.
One lean service
The whole engine is a single service with a pool sized to the machine, which is what makes self-hosting practical on modest hardware instead of a container fleet.
Running your own browsers instead? See the honest comparison.
Cloud when you want speed. Self-hosted when data can't leave.
Both run the identical engine. Use the cloud API in minutes, or run KimiDoc inside your network, where payslips and statements never touch third-party infrastructure.
api.kimidoc.com
Zero infrastructure. Sign up, grab a key, render.
- TLS, storage and scaling handled for you
- Template editor with live preview
- Usage dashboard and per-key metering
Your servers, your network
The documents never leave your network. No callbacks, no telemetry, no fonts fetched at render time. It runs in an air-gapped subnet with no route to the internet at all.
Licensed per server. Tell us about your setup and we will send the build, the install steps and a licence sized to it.
Talk to us about self-hostingA payroll run in one request
Encrypted per employee, watermarked, terms attached, delivered as a ZIP with a reconciliation manifest, and a signed webhook when it's done.
curl -X POST https://api.kimidoc.com/v1/jobs \ -H "X-Api-Key: $KEY" -H "Content-Type: application/json" -d '{ "templateId": "payslip-2026", "documents": [ …40,000 employee records… ], "output": { "filenameTemplate": "payslip-{{employee.id}}.pdf", "encrypt": { "userPassword": "{{employee.dob}}", "allowCopy": false }, "stamp": { "text": "CONFIDENTIAL" }, "assemble": { "append": ["terms.pdf"] } }, "webhook": { "url": "https://erp.example.com/hooks/payroll", "secret": "…" }, "idempotencyKey": "payroll-2026-08" }' HTTP/2 202 · job queued · 40,000 documents · poll /v1/jobs/{id}
100+ ready-made templates. Every preview is a real render.
Not mockups. Each one below was produced by the engine you would be calling, from that template's own sample data. Open the PDFs and check. Invoices, payslips, statements, labels, certificates and contracts across twenty categories, free to take and change.
Where KimiDoc is already the right shape
When the document is the sensitive part
A payslip carries a salary. A statement carries a balance. A discharge summary carries a diagnosis. For plenty of teams the blocker was never the rendering; it was sending that data to somebody else's server at all.
Data residency you can point at
Run it in the region, datacentre or rack you are already accountable for. There is no cross-border transfer to document, because there is no transfer: the data never leaves the machine you installed it on.
Nothing phones home
No telemetry, no licence check-in, no usage beacon. Remote fetching is off by default, so a template cannot pull an asset from the internet unless you allow that host yourself.
Your retention rules, not ours
You choose how long rendered documents live and where the files sit. Delete a job and the PDFs go with it, on storage you control, backed up under whatever policy you already run.
Auditable by inspection
One service, one database file, one storage directory. Your security team can read the config, watch the ports and see exactly what it does, rather than taking a vendor's word from a questionnaire.
Where teams put it
Before you sign up
Do I need to install anything to try it?
No. Sign up, take the API key and POST your HTML. The free tier needs no card. If you would rather it never touched our servers at all, self-hosted runs the same engine inside your own network; it is licensed per server, so get in touch and we will size it with you.
What is the difference between the cloud API and self-hosted?
The engine is identical. The cloud API means no infrastructure to run, on a monthly plan; self-hosted means the documents and the data behind them never leave your network, licensed per server. Self-hosted has no telemetry and no licence check-in, and runs in an air-gapped subnet with no route to the internet.
Can it handle a full payroll or statement run?
That is what the batch endpoint is for. Submit up to 40,000 documents in one job, poll it or take a webhook when it finishes, and download the results as a single archive. Failures are tracked per document and can be retried without repeating the run.
How do I keep each document private to its recipient?
Encrypt per document with a password drawn from that recipient's own data, such as an employee number or a date of birth. You can also restrict printing, copying and modification, watermark every page, and append fixed pages such as terms and conditions.
What do my templates have to be written in?
Plain HTML and CSS, with {{placeholders}} where your data goes. Anything you can lay out for print works: flexbox, grid, SVG, web fonts, charts, right-to-left scripts. Every starter template on this site is an ordinary HTML file you can read and change.
What exactly counts against my quota?
Documents, not API calls. A render that fails is never counted, and previews in the editor are not counted either. A 5,000-payslip job counts as 5,000 documents.
Can I move from the cloud API to self-hosted later?
Yes, and nothing about your templates or your integration changes: same API, same template format. Teams often prototype on the cloud API and move the production workload in-house once it matters.
Is there a limit on templates or storage?
Templates are unlimited on every plan. Rendered documents and uploaded assets share a storage quota, and you choose how long finished jobs are kept before their files are cleaned up.
One meter. Everything included.
You pay for successfully rendered documents, nothing else. Unlimited templates on every plan. Watermarking, encryption, merging, batch jobs and webhooks included. Failed renders never count, and previewing a template in the editor counts as none. Pay yearly and two months are free.
Free
- 100 documents / month
- 24-hour output retention
- 1 AI template generation
- Every feature, no card
- Unlimited templates
Starter
- 1,000 documents / month
- 3-day output retention
- 10 AI template generations
- Everything in Free
- Email support
Growth
- 5,000 documents / month
- 7-day output retention
- 50 AI template generations
- Everything in Starter
- Priority rendering
Business
- 20,000 documents / month
- 14-day output retention
- 150 AI template generations
- Everything in Growth
- Priority support
Scale
- 50,000 documents / month
- 30-day output retention
- 300 AI template generations
- Everything in Business
- Volume pricing above this
Self-hosted: the plan where the data never leaves
Most rendering APIs are cloud-only. The identical KimiDoc engine also installs inside your own network, which changes what you can put through it: payslips, statements, patient records, documents you could never send to a third party.
- Documents render on hardware you control; nothing crosses a border
- No telemetry, no licence check-in, nothing phones home
- Unlimited documents, retention rules you set, air-gap friendly





