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.

First page of the Hebrew tax invoice sample, laid out right to left First page of the English invoice sample from Northwind Studio
Fig. 1 invoice and invoice-he, A4, rendered from the sample data. English PDF · Hebrew PDF

01

One request. The body is the file.

request.shcurl
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
responseHTTP/1.1
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.

Invoice sample, first page
Invoice Per-line tax, discount, PO reference; long item tables split across pages with the header repeated.
Hebrew tax invoice sample, first page
חשבונית מס Israeli tax invoice: ח.פ / ע.מ, allocation number, original or copy, 18% VAT breakdown.
Business report sample, first page
Report KPI row, sections and tables; three pages in the sample, page numbers in the footer.
Receipt sample
Receipt Narrow format for payments and point-of-sale.
Certificate sample, landscape
Certificate Landscape A4 with a serif display face; colours and fonts are template options.

All templates, with their JSON Schemas and sample data →

03

Three things we were stubborn about

  1. 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.

  2. 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.

  3. 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.

PlanPricePDFs / monthRequests / minutePast the limit
Free$020010Hard stop, no card
Starter$195,00060Opt-in, $0.005 each
Growth$4920,000120Opt-in, $0.004 each
Scale$9960,000300Opt-in, $0.003 each

Full pricing, FAQ and how we compare →

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