PDF rendering API pre-launch
The PDF leaves.
Nothing stays.
Send a template id and your JSON; get back a print-ready invoice, receipt or report in the same response. Hebrew and Arabic are set right to left properly, the fonts are embedded, and the document is never written to disk.
Launching soon. The API isn’t public yet; every page you see here is genuine output from the renderer.
invoice and invoice-he, A4, rendered from the sample data. English PDF · Hebrew PDF01
One request. The body is the file.
curl https://api.ktavly.com/v1/render \
-H "Authorization: Bearer $KTAVLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "invoice",
"data": {
"number": "INV-1001",
"issueDate": "2026-10-18",
"currency": "USD",
"from": {
"name": "Northwind Studio"
},
"to": {
"name": "Lumen Analytics"
},
"items": [
{
"description": "Design sprint",
"quantity": 1,
"unitPrice": 6400
}
],
"taxRate": 8.5
}
}' \
-o invoice.pdf
200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="INV-1001.pdf"; filename*=UTF-8''INV-1001.pdf
Content-Length: 38,809
X-Pages: 1
X-Usage-Remaining: 199
%PDF-1.4 … the invoice itself, streamed back.
# On our side: 0 bytes written to disk;
# logged: route, status and timing only.
Errors come back as JSON with a stable code and a human sentence, for example 402 quota_exceeded or 422 validation_failed with the exact field. The full contract is in the API reference and the OpenAPI 3.1 file.
02
Specimens
Five built-in templates, each shown exactly as it comes out of the renderer. Click any page to open the PDF.





03
Three things we were stubborn about
-
Nothing is kept
Your JSON goes into memory, the PDF comes back in the response, and both are gone. There is no document store to breach and nothing to delete later. Logs hold the route, status code and timing, never the body or your IP address.
How we check: the test suite renders documents containing a marker string through every input path, then scans the disk, the database and the logs for it.
-
Right to left, done properly
Hebrew and Arabic documents mirror the whole layout, not just the text. Mixed runs like חשבונית 20261042 keep their numbers in order, and Heebo, Frank Ruhl Libre and Noto Sans Arabic ship with the renderer, so a PDF never falls back to boxes.
How we check: the Hebrew tax invoice is rendered in the tests and its VAT, totals and reading order are asserted from the PDF text.
-
Priced by volume, nothing else
Every plan gets every template, the editor and RTL. Plans differ only in how many PDFs you render and how fast. Free stops hard at 200 a month; paid overage is off until you turn it on.
How we check: limits come from a single file that drives the API, the dashboard and this site.
04
Launch prices
US dollars per month, excluding tax. One document is one successful render, however many pages it has.
| Plan | Price | PDFs / month | Requests / minute | Past the limit |
|---|---|---|---|---|
| Free | $0 | 200 | 10 | Hard stop, no card |
| Starter | $19 | 5,000 | 60 | Opt-in, $0.005 each |
| Growth | $49 | 20,000 | 120 | Opt-in, $0.004 each |
| Scale | $99 | 60,000 | 300 | Opt-in, $0.003 each |
Launching soon
There is no waitlist form, on purpose: we’d rather not hold your email before there is something to send you. The docs, the API reference and the OpenAPI file are final, so you can build against them today and switch on a key at launch.
Want proof today? A small public demo renders the built-in templates with their sample data or yours: 50 documents a day in total, no key, nothing stored.
curl -X POST https://ktavly.pages.dev/v1/demo/render \
-H "Content-Type: application/json" \
-d '{"template":"invoice-he"}' -o invoice-he.pdf