JSON-first document generation

PDF generation API for JSON — without HTML or headless browsers

Create invoices, contracts, reports and certificates with reusable JSON blueprints and programmable Jay logic. Send structured data to the API and receive finished PDFs through signed async webhooks.

Free plan includes 50 page-credits every month.

50 free page-credits/month

Create an account, use public blueprints, and start generating documents on the free plan.

No Chromium stack

Generate PDFs without maintaining Puppeteer, Chrome workers or HTML/CSS rendering pipelines.

~20ms invoice render

A Stripe-style single-page invoice renders in about 20ms in benchmark conditions, without a browser runtime.

Generate PDFs from reusable document blueprints

Start with a public blueprint or create and store your own private ones. A JayCode blueprint is a JSON document definition enhanced with Jay expressions that compute content dynamically while keeping layout, styling and document logic together.

Public and private blueprints

Use ready-made public examples or create private blueprints for your own document workflows.

Send data, not HTML

Your backend sends structured business data while the blueprint handles layout, formatting and document structure.

Keep document logic reusable

Use Jay expressions for conditions, loops, formatting, computed values and decimal calculations instead of scattering document logic across application code.

Public blueprint gallery

See the documents your JSON can produce

Browse working invoices, operational documents and multi-page layouts. Open any example to inspect the generated PDF, then explore the blueprint and render job behind it.

Loading public examples...

Example details

Document example

Generated PDF

Download PDF

How JSON-to-PDF generation works

1. Choose a blueprint

Use a public document blueprint or create your own reusable JSON template.

2. Define document logic

Add layout, styles and Jay expressions for conditions, loops, formatting and decimal calculations.

3. Send JSON

Submit structured business data to the render API as a job.

4. Receive the result

JayCode renders asynchronously and sends a signed webhook with a signed PDF download URL.

Production PDF API features

Jay-powered dynamic content

Use conditions, loops, nested data, formatting, computed values and decimal calculations inside reusable blueprints.

Multi-page document layout

Handle automatic page breaks, multi-page tables, repeating table headers, document headers and footers, and page numbers.

Fonts and graphics

Reuse custom fonts plus raster and vector graphics across branded documents.

Barcodes, QR codes and links

Build business documents with generated codes, links and other structured document elements.

Signed async delivery

Submit render jobs asynchronously and receive completion details through signed webhooks with signed PDF URLs.

Element-level diagnostics

Render-time errors identify the blueprint element that failed and explain why, with diagnostics delivered through the webhook flow.

PDF generation for document-heavy products

JayCode is built for software teams generating recurring or logic-heavy business documents from structured data.

Billing documents

Generate invoices, receipts, statements and payout summaries from order, subscription or marketplace data.

Contracts and customer documents

Create agreements, employment documents, policy files and other customer-facing records with dynamic content and consistent formatting.

Operational documents

Produce reports, certificates, delivery notes and business forms from operational data through one API.

Simple EUR subscription plans

PDF generation API pricing

Choose a plan based on monthly pages, storage, blueprint capacity and render throughput. Every rendered PDF page uses one page-credit, and paid plans include a predictable per-page overage rate.

Monthly JayCode subscription plans and included limits
Plan Monthly Pages/month Overage/page Storage API keys Blueprints Renders/min
Free €0 50 50 MB 2 5 5
Starter €9 500 €0.018 250 MB 5 25 20
Developer €19 1,500 €0.014 500 MB 10 50 30
Pro €39 5,000 €0.010 1 GB 20 100 60
Growth €79 12,000 €0.007 2 GB 40 200 100
Business €149 30,000 €0.005 5 GB 100 500 200
Enterprise €299 75,000 €0.004 10 GB 200 1,000 400
Custom Negotiated Custom Custom Custom Custom Custom Custom

How page-credits work: each rendered PDF page uses one page-credit. Paid-plan overage is charged at the listed EUR rate per page. Storage is the plan/workspace quota and is separate from generated PDF retention.

Fast PDF rendering without browser overhead

The renderer does the hard part in milliseconds. In benchmark conditions, a Stripe-style single-page invoice rendered in about 20ms, while multi-page documents reached as low as about 5ms of rendering time per page. We also measured the complete async service across 36 000 jobs, from API request to stored PDF and webhook delivery.

~20ms

Rendering time for the benchmark's Stripe-style single-page invoice.

As low as ~5ms/page

Observed rendering time per page for multi-page documents, depending on document complexity.

268ms p99.9

End-to-end completion time across the full async request, storage and webhook pipeline.

Most latency is delivery

Roughly 90% of total completion time in the benchmark deployment was spent outside the renderer, primarily moving and storing the finished file before webhook delivery.

36 000 jobs, 0 failures

The full async benchmark completed every submitted job. End-to-end latency measured 174ms p50, 227ms p99 and 268ms p99.9.

26.73 jobs/s

Sustained throughput through rendering, file storage and webhook delivery with 2 workers on a 4-core AMD EPYC KVM.

The benchmark reflects the complete production-style workflow, not just an isolated renderer test. The current deployment stores completed PDFs in Amazon S3 in Frankfurt before notifying the caller, so file delivery and storage dominate the measured end-to-end time.

Python client integration for Django, Flask and standalone apps

The official client is currently Python-based and supports Django, Flask and standalone applications. Follow the lifecycle from configuration and startup to render submission, webhook handling and shutdown.

# Django settings
JAYCODE_CLIENT_DOWNLOAD_DIR = os.environ.get("JAYCODE_CLIENT_DOWNLOAD_DIR", "downloads")
JAYCODE_CLIENT_DOWNLOAD_WORKERS = int(os.environ.get("JAYCODE_CLIENT_DOWNLOAD_WORKERS", "2"))
JAYCODE_CLIENT_REQUEST_TIMEOUT = int(os.environ.get("JAYCODE_CLIENT_REQUEST_TIMEOUT", "30"))

For complete implementations, see the GitHub repository with the available client examples.

Security, delivery and deployment

Signed webhooks and downloads

Job completion is delivered through signed webhooks, and generated PDFs are retrieved through signed download URLs.

Frankfurt-region file storage

Generated PDFs are stored in Amazon S3 in the Frankfurt region and retained for 7 days. Private download URLs expire after 1 hour. Retention and data handling are described in the Terms of Service.

Self-hosted compiler option

The JayCode compiler can be deployed in your own environment for workloads that require local document compilation and stricter control over document processing.

Frequently asked questions

How do page-credits work?

Each rendered PDF page uses one page-credit. Your plan's Pages/month allowance is the number of page-credits included each month.

What happens when I use my included pages?

After the included monthly allowance is used, additional rendered pages are charged at the plan's listed overage rate per page. The Free plan does not list an overage rate.

Is JayCode an HTML-to-PDF API?

No. JayCode renders JSON blueprints with a purpose-built document runtime instead of converting HTML with Chromium or another browser engine.

What is a JayCode blueprint?

A blueprint is a reusable JSON document definition enhanced with Jay expressions for dynamic content, conditions, loops, formatting and calculations.

Is PDF generation synchronous or asynchronous?

JayCode is asynchronous. Your application submits a render job, then receives completion details through a signed webhook with a signed PDF download URL.

What document features are supported?

Blueprints support automatic page breaks, repeating table headers, multi-page tables, headers and footers, page numbers, barcodes, QR codes, links, SVG and raster graphics, conditions, loops, nested data, formatting and decimal computations.

How are render errors reported?

Render-time errors are returned through the webhook flow and identify which blueprint element failed and why.

How long are generated PDFs retained?

Generated PDFs are stored in Amazon S3 in the Frankfurt region and retained for 7 days. Private download URLs expire after 1 hour; related job data and logs may be retained for up to 3 weeks as described in the Terms of Service.

Which client libraries are available?

The official client is currently Python-based, with integration examples for Django, Flask and standalone Python applications.

Is there a no-code blueprint editor?

No. JayCode blueprints are currently authored as text, which is intended for developers and teams that want versionable, programmable document definitions.

Create a free account and generate your first PDF

Start with a public blueprint, send structured data, and receive the generated PDF through the signed async delivery flow. The free plan includes 50 page-credits every month.

Related PDF generation solutions

Explore focused guides for common PDF generation workflows and migration paths.

Invoice PDF API

For direct invoice generation from API calls and reusable templates.