Add Printless to your site in one line.
Drop a button on any page. Your customer taps it, enters their phone, and instantly gets your print — a receipt, token, ticket or invoice — in the Printless app or over WhatsApp. No printer, no paper.
Install in 30 seconds
Load the script once, then place a button anywhere with your publishable key and a template reference. That's it — the button renders itself and handles the phone prompt, delivery and status.
<script src="https://js.printless.app/button.js" async></script>
<div class="printless-button"
data-printless-key="pk_live_your_publishable_key"
data-printless-template="tmpl_your_template"></div>
Create a publishable key
In the Business Portal's Developers page, generate a pk_live_ key locked to your website's domain. It's safe to put in public HTML.
Register a template
Define the print once (type, title, content) with your secret key. You get a tmpl_ reference to point the button at.
Drop the button
Paste the snippet. On tap, Printless collects the phone and delivers the print — in-app, or WhatsApp for new customers.
Attributes
Set these on the button element. Only the key and template are required.
| Attribute | Description |
|---|---|
data-printless-keyrequired | Your publishable key (pk_live_…). Origin-locked, create-only. |
data-printless-templaterequired | What to issue: a button template reference (tmpl_…), the GUID of a custom template designed in the Business Portal's Templates page — for an agreement your customer signs, a Contract template. |
data-printless-label | Button text. Default Go Printless. |
data-printless-mobile | Pre-fill the customer's phone (skips typing). |
data-printless-variables | JSON object filling {{placeholders}} in a button template, e.g. {"order":"A-91"} — or, for a custom template, its fields by key. |
data-printless-theme | light for a white button on dark backgrounds. Default is brand indigo. |
data-printless-size | compact for a smaller pill. |
You can also render programmatically: Printless.render('#el', { key, template }), or open the flow directly with Printless.open({ key, template }).
Custom templates
A custom template is a print type you design yourself in the Business Portal's Templates page (Standard plan and above) — "Advance Payment", "Repair Estimate", "Delivery Note" — with your own fields, a summary and a footer. Point the button at the template's GUID instead of a tmpl_ reference and put the field values, keyed by field key, in data-printless-variables. Values are strings; money and number fields are parsed, a select must match one of its options, and a notes variable becomes the notes paragraph. Line items aren't supported from the button — issue those from your backend with POST /ent/v1/print/template.
<div class="printless-button"
data-printless-key="pk_live_your_publishable_key"
data-printless-template="6d0b8a4e-3c2f-4b7e-9a1d-2f5e8c9b0a11"
data-printless-variables='{"customerName":"Ari Nakamura","advanceAmount":"15000"}'></div>
The customer receives a native Print document built from your template — the same one the Business Portal's New Print page issues.
Contracts and keys
Contract. Save a Contract template in the Business Portal's Templates page with the terms written into it, and point the button at its GUID. Your customer fills in only the fields the template asks for (from data-printless-variables) and signs on their own phone with Face ID or a fingerprint. The button never carries the text of an agreement itself: anyone can read a page's markup, so the terms live in your template.
<div class="printless-button"
data-printless-key="pk_live_your_publishable_key"
data-printless-template="YOUR-CONTRACT-TEMPLATE-GUID"
data-printless-variables='{"counterpartyName":"Ari Nakamura","agreementDate":"2026-10-01"}'></div>
Key. Keys are not issued from the button — anyone who can see your page could mint a door key. Issue them from your own system once a stay is paid for or checked in, with a secret key: POST /ent/v1/print/key (see the API reference). The guest can add the key to Apple or Google Wallet, and your door reader checks every scan with POST /ent/v1/key/verify. The same goes for access cards (Card of kind Access, Gate or Key).
Richer documents (server-to-server)
The button issues a template print in one tap — perfect for receipts, tokens, tickets and invoices. When you need a full multi-page document, issue it from your backend with an API key instead of the button:
| Format | Use it for |
|---|---|
Print — native .printless | A structured, multi-page document rendered natively and end-to-end encrypted on the customer's phone. POST /ent/v1/print (Professional plan and above). Since v1.2 a document can carry its own lang and dir — an Arabic document reads right-to-left whatever the reader's phone language — and a meter block shows a value against its range. |
Legacy — PDF | A finished PDF delivered as-is and opened in the phone's native PDF viewer. POST /ent/v1/print/document, deprecated — Business plan only, the same rule as the PDF upload in the business apps and portal. Don't build anything new on it. |
Full request shapes and the block vocabulary are in the API reference.
Live demo
This is the real SDK, loaded from js.printless.app/button.js, rendering exactly what your customers see. Tap it — no real print is sent.