License & Pricing
Boundaries
- Free, open-source packages:
@paperjsx/json-to-pptx,@paperjsx/json-to-pdf,@paperjsx/json-to-docx, and@paperjsx/json-to-xlsxare all licensed under Apache-2.0. Local/self-hosted developer use. - Paid packages:
@paperjsx/json-to-pptx-pro,@paperjsx/json-to-pdf-pro,@paperjsx/json-to-docx-pro,@paperjsx/json-to-xlsx-pro. The packages install from the public npm registry; advanced features and production/self-hosted commercial use require an active signed PaperJSX license. - Hosted API: authenticated managed runtime with preflight, diff, approvals, and PPTX/POTX brand-pack ingestion. Platform is available through monthly or annual self-serve purchase.
Credentials
- Hosted API key: a
pj_live_…key from Dashboard → API Keys. Send it only with hosted V2 requests asAuthorization: Bearer pj_live_…. - SDK license: an Ed25519-signed license issued after Pro activation. Set it as
PAPERJSX_LICENSE_KEYor pass it to the engine. Package installation itself does not require a registry token. - Hosted API key and SDK license are separate credentials. Never pass a
pj_live_…hosted key to a local engine or expose either credential in browser code.
Using a signed SDK license
Install the Pro package from the public npm registry, then set the environment variable only after PaperJSX has issued your organization a license:
npm install @paperjsx/json-to-pptx-pro
export PAPERJSX_LICENSE_KEY=pjsx_live_YOUR_SIGNED_LICENSE
Or pass the signed license directly when creating an engine:
import { createEngine } from "@paperjsx/json-to-pptx-pro";
const pptx = createEngine({
licenseKey: process.env.PAPERJSX_LICENSE_KEY,
});
DOCX, PDF, and XLSX accept the same explicit key on their render options. An explicit licenseKey takes precedence over PAPERJSX_LICENSE_KEY, including when both are present.
await renderToDocx(doc, { licenseKey });
await PdfEngine.render(doc, { licenseKey });
await SpreadsheetEngine.render(doc, { licenseKey });
Plans
| Plan | Role | Includes |
|---|---|---|
| Free | Open wedge | Apache-2.0 packages, local/self-hosted development, playground, and unlimited local MCP server use |
| Pro | Production | PPTX, DOCX, XLSX, and PDF with all Pro features, one company-wide license, and standard support |
| Platform | Embedded delivery | Self-serve hosted render capacity, priority support, and commercial embedding rights |
| Enterprise | Strategic | OEM/redistribution terms, deployment architecture review, security review, custom SLA, and custom terms from $50,000/year |
How validation works
Enterprise customers may instead receive a long-lived offline certificate:
pjsx_offline_v1_<base64url(UTF-8 JSON entitlement)>.<base64url(Ed25519 signature)>
The signature covers the ASCII bytes of pjsx_offline_v1_<payload>. The payload embeds the organization, Enterprise tier, allowed formats and features, seat and deployment scope, issue time, and expiry. Pro engines verify the certificate in-process without a database or network request and return the same structured public license error contract when it is invalid or expired. Offline certificate issuance and signing remain a managed PaperJSX service; no private issuer package or server path is part of the customer SDK.
Provision the public key from https://paperjsx.com/.well-known/paperjsx-license-public-key.pem before moving it into an air-gapped environment. Pin the reviewed key rather than fetching it dynamically at runtime.
Revoking, upgrading, cancelling
- Revoke online API keys: Dashboard → API Keys → delete.
- Replace an offline certificate: contact PaperJSX. A fully air-gapped runtime cannot receive immediate online revocation state, so expiry, certificate replacement, key rotation, and updated SDK deny-list material are the applicable controls.
- Upgrade: takes effect immediately; the same key reflects the new tier on next validation.
- Cancel: plan remains active until the end of the billing period, then rendering throws a license error. No data is deleted.